第 1 步 - 新增 Route
別忘了,使⽤者想要看到你網站上的內容,第⼀步是要問過 Route,所以我們先在
Route 上簡單的加上⼀條:
Rails.application.routes.draw do
get "/hello_world", to: "pages#hello"
resources :posts
12 Controller
169
resources :users
end
當使⽤者輸入 /hello_world 網址的時候,會交給 PagesController 的
hello ⽅法處理。(是的,其實網址跟 Controller 上的 Action 不⼀定要同名)
第 2 步 - 把⽂字印出來吧!
有了 Route 之後,接下來回到 Controller 把 hello 這個 Action 加上去:
class PagesController < ApplicationController
def hello
render plain: "<h1>你好,世界!</h1>"
end
end
在 hello ⽅法裡要把⽂字輸出到瀏覽器上,不是使⽤ return 也不是使⽤
puts ,⽽是使⽤ render ⽅法,後⾯的 plain 參數是指要輸出⼀個⼀般的⽂
字內容到畫⾯上。
有些剛開始學 Rails 的新朋友可能會想這樣做:
class PagesController < ApplicationController
def hello
render plain: "<h1>你好,世界!</h1>"
puts "---- 你好 ----"
end
end
使⽤ puts ⽅法把資料直接輸出在畫⾯上,看起來很直覺,但這樣不會有效果。事
實上並不是 puts ⽅法不能⽤,它的確可以把東⻄印出來,只是不是印在瀏覽器上
給你看到,⽽是印在 Rails 的 log 裡,仔細看⼀下正在執⾏ rails server 的那個
畫⾯是不是有這樣的東⻄:
第 3 步 - 把⼯作交給 View 吧
雖然在第 2 步可以直接在 Controller 的 Action 裡透過 render ⽅法把資料輸出在
畫⾯上,但如果遇到比較複雜的 HTML 通常就不會⽤這個⽅式了。在 Controller 裡
的 Action,如果沒有特別指定 render ⽅法或參數,它會到 app/views/ 的⽬錄
找「 Controller 名字」⽬錄裡的 Action 同名檔案。以這個例⼦來說,它會去找
app/views/pages/hello.html.erb 。
如果這個 hello.html.erb 檔案不存在,就⾃⼰⼿動建⼀個吧。既然輸出的事情
交給 View,那原來 hello 這個 Action 的 render ⽅法就可以拿掉:
class PagesController < ApplicationController
12 Controller
171
def hello
end
end
就這樣空空的,然後編輯 app/views/pages/hello.html.erb
<h1>你好,世界</h1>
<h2>我是設計師也看得懂的檔案喔</h2>
重新整理,應該就會看到跟剛才的差別:
這樣的好處是不⽤把 HTML 都寫在 Controller 裡(實務上也很少⼈真的會這麼
做),再來就是要跟設計師合作的時候也比較⽅便。
[為你自己學Ruby on Rails]https://railsbook.tw/chapters/08-ruby-basic-4.html